/*
 * Copyright (c) 2012-2020 MIRACL UK Ltd.
 *
 * This file is part of MIRACL Core
 * (see https://github.com/miracl/core).
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include "arch.h"
#include "ecp_BLS12381.h"

/* Curve BLS12381 - Pairing friendly BLS curve */

#if CHUNK==16

#error Not supported

#endif

#if CHUNK==32

const int CURVE_Cof_I_BLS12381= 0;

const int CURVE_B_I_BLS12381= 4;
const BIG_384_29 CURVE_B_BLS12381= {0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Order_BLS12381= {0x1,0x1FFFFFF8,0x1F96FFBF,0x1B4805FF,0x1D80553B,0xC0404D0,0x1520CCE7,0xA6533AF,0x73EDA7,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Gx_BLS12381= {0x1B22C6BB,0x19D78056,0x1E86BBFE,0xBD07FF2,0x1AC586C5,0x1D1F8B8D,0x4168538,0x9F2EE97,0xFC3688C,0x27D4D60,0x9A558E3,0x32FAF28,0x1F1D3A73,0xB};
const BIG_384_29 CURVE_Gy_BLS12381= {0x6C5E7E1,0x551194A,0x222B903,0x198E8945,0xB3EDD03,0xC659602,0xBD8036C,0x12BABA01,0x4FCF5E0,0xBA0EC57,0x8278C3B,0x75541E3,0xB3F481E,0x4};
const BIG_384_29 CURVE_HTPC_BLS12381= {0x1DE821B8,0x6288315,0x1715FEDF,0xD2A41DC,0x1C31088B,0xDEEA01F,0x7FC11BB,0x1E9291A1,0x1A12F01D,0xD1EB8DE,0x16CE3D2A,0x16D97EE9,0x1F7462C8,0x0};

const BIG_384_29 CURVE_Bnx_BLS12381= {0x10000,0x10080000,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Cof_BLS12381= {0x10001,0x10080000,0x34,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
//const BIG_384_29 CURVE_Cof_BLS12381= {0xAAAB,0x55558,0x157855A3,0x191800AA,0x396,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};


const BIG_384_29 CURVE_Pxa_BLS12381= {0x121BDB8,0x402B646,0x16EFBF5,0x18064D50,0x1D1770BA,0x5B23D71,0xC0AD144,0x1A9F4807,0x11C6E47A,0x196E2882,0x9820149,0x11E1522,0x4AA2B2F,0x1};
const BIG_384_29 CURVE_Pxb_BLS12381= {0x1D042B7E,0xD63E82A,0x51755F9,0x19E22427,0x15049334,0x10DDEE3F,0x186AD769,0x1A132416,0x5596BD0,0x4413A7B,0x1F6B34E8,0x4E33EC0,0x1E02B605,0x9};
const BIG_384_29 CURVE_Pya_BLS12381= {0x8B82801,0xC9AA430,0xB28A278,0x15939877,0xD12C923,0xD34A8B0,0xE9DB50A,0x155197BA,0x1AADFD9B,0x16D171A8,0x3327371,0x4FADC23,0xE5D5277,0x6};
const BIG_384_29 CURVE_Pyb_BLS12381= {0x105F79BE,0x15483AFF,0x1B07686A,0xE1A4EB9,0x99AB3F3,0x955AB97,0xEBC99D2,0xFD0B4EC,0x19CB3E28,0x15E145C,0xCAB34AC,0x1D4E6998,0x6C4A02,0x3};


#if HTC_ISO_BLS12381 != 0

const BIG_384_29 CURVE_Ad_BLS12381= {0xD584C1D,0x7A14041,0x183E5FD7,0x6DF1B41,0x81AC989,0xC0D77EC,0x1AA363A2,0xA707DCC,0x2B0EA98,0x164B6A4C,0xF5A4E80,0x771D286,0x144698A,0x0};
const BIG_384_29 CURVE_Bd_BLS12381= {0xE172BE0,0xE62474C,0x1B3AA974,0x642B462,0x15EF55A2,0xA7E779,0x1C282E7,0x1E1E49E8,0x1B2016C1,0x3A9F771,0x62C4BA,0x2D10060,0xE2908D1,0x9};
const BIG_384_29 PC_BLS12381[53]= {{0xBA2D229,0xE45D174,0x134E47EA,0x1637016C,0x6B68C24,0x1F8DE126,0x1EF08F02,0xFC45906,0x1D31D79D,0x1C0F6F71,0xF47A588,0x1C4C1CE1,0xE08C248,0x3},{0x1605FB7B,0x133EF9F8,0xA177B32,0x16EE3F18,0x14866F69,0x19B001D8,0x1E5B542B,0x1BBCCF0F,0xDFA7DCC,0xE92B2D8,0x1CB63B02,0x139C0FC4,0x321DA07,0x8},{0x1E390C9E,0x1920833D,0xC9DE5F,0x12165DB8,0x11B7FA31,0xA5D7A5D,0x12659D8C,0x1007418B,0x2DD2ECB,0xAE89C79,0xB830DD4,0x179F4F88,0x9B1F8E1,0xB},{0x497E317,0xB8CC354,0xDD3A55B,0x52BE52D,0x1D1DE4FA,0xB649462,0x15D28B16,0xD9CF3EA,0xDC43B75,0xB1DF4C8,0x1EE42CCD,0x134F1F88,0xD3CF1F,0x4},{0x3F0C88E,0x65AB0C7,0x1D1D6BE7,0xF91F191,0x753339B,0x3177879,0x16C69A0B,0x1564EB69,0x13356DE5,0x6888BF2,0x1A1D0E21,0x357B7C5,0x1B81E770,0xB},{0x139ED84,0xEBF912D,0x14BB2B7,0x4A25182,0x6B2A8DA,0x110C7CE4,0x13864023,0x4C9E1F1,0x1FB11586,0x1C573295,0x1A8DC9B0,0x1FC89A52,0x16ED6553,0x6},{0xF652983,0x89E0E33,0x19CF4673,0xE1A5B95,0x8F90A08,0x15C84BF3,0x66E7B4E,0xFBB2A4F,0x15DB3CB1,0x1FBD3A55,0x744806,0x1AE627FE,0x30C3250,0xB},{0xC8895D9,0x8AA674D,0x79DF114,0x1450DE60,0x1AC18985,0x15B2CC17,0xCFC21BB,0xB424AFF,0x1499DB99,0x1F208C72,0x1990AD2C,0x333E886,0x99726A3,0x7},{0x1D9B6861,0xD9C4320,0x41C64F1,0xDC4B9C6,0x13083533,0x1944F8D9,0x1C97C6CC,0xCAD51B7,0x12D7F5E4,0x183F2AA0,0x13818274,0x1F98DB6E,0x178E7166,0xB},{0xC9EDCB0,0xBCFCED,0x25CA7F8,0x187C7A54,0xE25C958,0x1280F634,0xF95A1E3,0xE652B30,0x1BCE0324,0xE8854D0,0x7441231,0x12ECF1D8,0x154005DB,0x6},{0x13CB83BB,0x1A7778D,0x630D5BA,0x11E54DE6,0x1E86B483,0x119E3868,0x105FD597,0xB65ED50,0x1C7C17E7,0x110A3D40,0x1622EAC,0x1287565E,0x1294ED3E,0xB},{0x134649B7,0x1560B313,0x198B5BAB,0x185ABE5,0xE2C8561,0x1DAB66DA,0x17FC989,0x11145AE0,0x56B303E,0xECCC0AC,0xE024407,0x1D066681,0x1A05F2B1,0x8},{0x8ECDD0A,0xB1C268B,0x1E19400B,0xE9C9696,0x11C15931,0x99CBC79,0xDDDB7D,0x1DD2DEFA,0xF682B4,0x159D2B34,0x11DB5B8F,0x13D255A8,0x15FC13AB,0x4},{0x19A1D641,0x1BB761D3,0xE90DC11,0x4CD2557,0x18835038,0x6D33F9C,0x19ADD040,0x3AE2C26,0xCE07F8D,0xD7E3D1E,0x17A482CF,0x1B4A9F04,0x10ECF6A,0x5},{0x1DCC5A5E,0xFBECCDD,0x478B4C4,0xB72913A,0x2C580FA,0x10E6FCC1,0x2A0665B,0x1843794D,0x196E7F63,0x3A6780C,0xC2CFD6C,0x1AC95164,0xA7AC2A9,0xA},{0xEE84A3A,0x12BA24B,0x3781B3B,0x766A71E,0xDE9CEA7,0x3983157,0x62538B8,0x1335EA74,0x1570F57,0x1F02CB39,0x3CF8318,0x2D26C32,0x172CAACF,0x3},{0x1F6304A5,0x16FCD14,0x8A3C470,0x1A49788,0x982F740,0x1E77925C,0x1534290E,0x1D39D395,0x9395735,0x18283637,0x154E43DF,0x9CCCF72,0x7355F8E,0x7},{0x1532A21E,0x1CE9CAD9,0xD5E0754,0x537503E,0x106DA9BD,0x27419D9,0xAEE35AD,0xB34240C,0x1DFFDFC7,0x1A1F3D03,0x29BC757,0x4522950,0x1A8E1620,0x9},{0xDC62CD8,0x186F449C,0x1B3D7104,0xDAA487D,0x16FD0497,0x1455E146,0x15455332,0x7E2D62C,0x145B0824,0x1BE2075A,0x120EABFB,0xB15C5FD,0x1425581A,0x1},{0x1CB83E19,0x611CDD2,0x53FB73F,0x7A12CF9,0xCEACD6A,0x700588D,0x1347F299,0xDEB4E31,0x1F6F8941,0xDFF94C8,0x4DF98A,0xF4644BD,0x12962FE5,0x5},{0x82B3BFF,0xE413B76,0xC09BA79,0x155108D9,0xBF5713D,0x12C4624,0x30049B,0x19419E10,0x167041E8,0x14C729B1,0x122D1C44,0x16AB3886,0x561A5DE,0x9},{0xD21B1C,0x9E7CFD2,0xD0F7E26,0x11AD037C,0xAC62B55,0x430BFE4,0x2EA7256,0x9746B69,0xF01D5EF,0x1A5E9FD3,0x62CB98B,0x19FE335C,0xCA8D548,0x4},{0x9C8B604,0x5A2B5F3,0x10071DC1,0xA04FDFD,0x101B2B66,0xA7D4AD7,0x8E55EB7,0x11F092CB,0x15CB181D,0x1A16F975,0x13A942CE,0x121E079C,0x1E6BE4E9,0xA},{0x1475224B,0x1358F38A,0x1E6BEDE1,0x20936CA,0x7CE46BA,0x7AE9CB5,0x15A366AC,0x103AFD0C,0x1C5E673D,0x1A46251F,0xA8567D,0x1C899E22,0x1C129645,0x2},{0x1B980133,0x16CE9FAE,0x8CA9910,0x1F215A38,0x659CC6C,0x11969E20,0x16004F99,0x101A982,0x1C757B3B,0x13DF18AE,0x1CBF002B,0x1A3D9536,0x45A394A,0x1},{0xB971EF8,0xA602780,0x4847C83,0x10A38323,0x633F06C,0x87403DA,0x23B009C,0x54684D6,0x47AA7B1,0x27A9FA,0x14554258,0x372733,0x1182CAC1,0x5},{0x10074D8E,0x103E4526,0x113581B3,0x139BE836,0x1643249D,0x1F3FC88F,0x918B9AF,0x17155E18,0xC523559,0x1FF6976E,0xE463050,0x1E6DEDBD,0xB46A908,0xC},{0x1011C132,0x9B88D6,0xFEEBF3A,0x1E74B99C,0x1E61031B,0x1F20B1C4,0x4FF4460,0x196D95E9,0x13CD2FCB,0x18EA1FDC,0x37F42E3,0x6F9A37C,0x1713E479,0xC},{0xA731C30,0x1D7D575E,0x13AE9BCA,0x1EE0ABBA,0xD43B9B3,0xF3F68F2,0x1BF81A61,0x14F22B5E,0x3C42A0C,0x1D6D0A51,0x88EAF79,0x30D7B6A,0x1BBA7A1,0x7},{0x1BDBA587,0x1B872BB,0x181E8D8,0xCA4038F,0xCABE69D,0x17350F90,0x9B07A2D,0x2CCF3B8,0x1B8F3ABD,0x10F26D0D,0x1A232788,0x1B2CD097,0x1FC4018B,0x4},{0x1870FB29,0xAF26518,0x17FA4D68,0xC8AA1FD,0x842642F,0x6D36136,0x7FF40E,0x17FC77BB,0x14170A05,0x9653633,0x17A649AF,0x67570DF,0x187C8D53,0x4},{0x1FE9D6F2,0xB0FC42A,0x3D057B2,0x10F5848C,0x14F3747A,0x9E26B1,0x132D48C5,0x19457C30,0x1CE75BB8,0x13BCB59,0xCB25DF4,0x1F583779,0xAB0B9BC,0x2},{0x1633A5F0,0xD91D589,0x16A01CA6,0x1EC64D92,0x1544E203,0xE1E9D6A,0x1EF5D941,0x1A95F5B6,0x74A7D0,0xDC78535,0x8847847,0xC696D4,0x603FCA4,0xB},{0x12E8FEDB,0xDB6D767,0x4102A10,0xFF1B813,0x11ADC2EE,0x1FE9109A,0x2E1E60C,0x1F7C79CA,0x4195536,0x1510A94E,0x172BD3F8,0x1FC1FE26,0xCC03FDE,0x4},{0x10E5F4CB,0x11AAE3BD,0x11877B29,0xB5753D,0x11CF9DE4,0x11F60192,0x4702792,0x1721DD6F,0x17D42AA7,0x16C3A33A,0x1E261D46,0x11303842,0x1F86376E,0x0},{0x72DE1F6,0x6FF1206,0xC0148EE,0x1AA42C51,0xDA7D26,0x1F25C8A0,0x138B0D12,0x1ACB1463,0x142552E2,0x351DA4C,0x1D28E132,0x152CDCCD,0xCC786BA,0x0},{0xE41C696,0x4BF3AD1,0xBEA2FF8,0xACE232C,0x1AD34D6C,0x11A1F5B3,0xF43E41,0xD84A9E7,0x31223E9,0x1BB7DA34,0x15440DB5,0x9DCB023,0x14996A10,0x9},{0x1707BB33,0x14C22B8C,0xEE8F0AF,0x18F5DD36,0x143D3CD0,0x17B64AB2,0x548AD4A,0x11C9150D,0x1A11AD13,0xA4C06E7,0x96747C2,0x17449DC0,0x10D97C81,0x4},{0x1D634B8F,0xAA39D0,0xD25E011,0x5EAE1E2,0xAA205CA,0x1E6B1AB6,0x14CC93B,0xCBC4E77,0x171C40F,0x106BC0CE,0x1AC90957,0xDBB807C,0xFA1D81,0x7},{0x6ED06F7,0xFD6E099,0x5332034,0xA2F7B0E,0x480E420,0x6F93CA1,0x1F072DD2,0x129CE524,0x12BF565B,0xA9E6BB7,0x18A2F743,0x165C9E76,0x660400E,0x1},{0x173345CC,0x14CD89C2,0xE42B047,0xEC7C7,0x19B86930,0x177CD006,0x899F573,0x1B315BE0,0x16543346,0x5A2F8A4,0x10D84C51,0x18ECFFC7,0xD6B9514,0x5},{0x2561092,0x1425A94F,0x1FAEFAA5,0x12D130DE,0x1913516F,0xD446753,0xB4A303E,0x115DF9C8,0x77F94FF,0x12462862,0x1D614B07,0x103A067F,0xCCBB674,0x5},{0x1A8F6AA8,0x7C5A4E5,0xC18100,0xB853E9F,0xA5C871A,0xD9B731B,0x18A43964,0x7376C34,0x1D9C6DD0,0xD69488,0x123C0428,0x1D480B7A,0xD2F259E,0x2},{0x18913F55,0x377A45D,0xA6CD78D,0x10BD47AA,0x1D4FBC73,0xC973F53,0x1EED4C21,0xC7C27B0,0x103216F7,0x1ECA5424,0x1AA08165,0xE14DC39,0x7A55CDA,0xB},{0x15535D4A,0x1919ECEA,0x49220DA,0x1FC5EF77,0x19B4852C,0x1A8625F9,0x482AF15,0x1C98D5EB,0x4F9FB0C,0x1E8EBA66,0x686F953,0x6D8C246,0x66C8ED3,0xC},{0x15812ED9,0x7720AD0,0x77B918,0x1EB6010,0x17132B92,0x7E9031A,0x1F5FFACD,0xBDF43E9,0xEE5A437,0x15DD37FB,0xEF377E,0x1C7D4FD4,0xA3EF08B,0xB},{0x126A775C,0x8D09CC8,0x2C7EE4F,0x1538034B,0x51D5F,0x12DE2005,0x3BD774D,0x1F51A19F,0xB5EECFD,0x5674C12,0x10EEA1CD,0x1533B65F,0x6007C08,0xB},{0xAF9B7AC,0x16323BFD,0xA733880,0x71B73BF,0x15A6449F,0xC3DB787,0x20717B3,0x18CAAA1B,0x2B70152,0x1563C18C,0x7EC99BA,0x30DB65B,0xD9E5297,0x4},{0x11A5001D,0x11C8A118,0x14BB7B76,0x162BB81F,0xC916A20,0xD07E4EF,0xEC150BB,0x13E1ED37,0x1CC6D19C,0x17C1146E,0xC033244,0x8BE87C9,0x1E0E0795,0x5},{0x45F5416,0x6936CC2,0xA5EB6A,0x6C9E585,0xAF41727,0x1244F393,0xC3848F6,0x1B7BB79A,0x11D115C5,0x1C4F6DA6,0x1C8348EF,0x131CA72B,0xB7D2887,0xB},{0x1DBF67F2,0x1129C5A9,0x1E5BE247,0xAF9AC6D,0xD2ECA67,0x12EE93CE,0x1CC430D6,0xAAA35CF,0x1778C485,0xB74758A,0x1BEAAB9F,0xC81B44E,0x18DF3306,0x2},{0xE49A03D,0x17B08161,0x14A78D4C,0x84C0EC6,0x1E01F78A,0x1AB7A29,0x16729284,0x1EE6389A,0x1885C84F,0x21E1A45,0x6832F5B,0x702403C,0x162D75C2,0xC},{0x103663C1,0xA3C929D,0x3081B40,0x6D11DEC,0x12E7A07F,0x1195ADF3,0xF9BBB0C,0x1CAF1301,0x9601A6D,0x7D68757,0x14860450,0x15393164,0x112C4C3,0xB}};

#endif

#if HTC_ISO_G2_BLS12381 != 0
const BIG_384_29 CURVE_HTPC2_BLS12381= {0xF8492B,0x13B89D4,0x1AA68D1F,0x108A10FD,0x16D9723B,0x1B0EEA65,0x1CD7D27C,0xDC4EA3A,0x149FAD53,0x10F6735,0x4075923,0x180F008F,0x52988B9,0x0};
const BIG_384_29 CURVE_Adr_BLS12381= {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Adi_BLS12381= {0xF0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Bdr_BLS12381= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 CURVE_Bdi_BLS12381= {0x3F4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0};
const BIG_384_29 PCR_BLS12381[13]= {{0xAAA5ED1,0x7155555,0x19C71C62,0x11C71A1E,0x18575709,0x8478A15,0x2A88B58,0x1CFE9D02,0x14CB14B4,0x8FAFDB0,0x1B5B7A9A,0x147199F5,0x11D6541F,0xB},{0x1FFFC71E,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0xAAA97D6,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0xC,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1C718B10,0xD9B8E38,0x1712F678,0x1212F4AD,0x74524E7,0x1BE34D51,0xA1AC3A5,0x6F43C4C,0x10761B0F,0xF1C08D6,0x1EFDC10F,0x16D9EF37,0x4C9AD43,0x9},{0x1FFFC71C,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x11C6D706,0x167E38E3,0x124BDA04,0x184BD7F1,0x1E500FC8,0x1CEC3E93,0x126FD510,0x1A940FEC,0x130F7DA5,0x183B688C,0x16693062,0x15682276,0x130477C7,0xA},{0x12,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFA8FB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}};
const BIG_384_29 PCI_BLS12381[13]= {{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFE38D,0x1AA7FFFF,0x11AAAAA4,0x12AAA9CB,0x520C0A3,0x31AD3C8,0x18FF3441,0x1ADF7AE0,0x7CC27C3,0x1B5E1F22,0x6424DF9,0x1BAA99BC,0xAB05F8B,0x4},{0x1FFFC71A,0x154FFFFF,0x3555549,0x5555397,0xA418147,0x635A790,0x11FE6882,0x15BEF5C1,0xF984F87,0x16BC3E44,0xC849BF3,0x17553378,0x1560BF17,0x8},{0xAAA97D6,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0x1FFFAA9F,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFAA63,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},{0x1FFFE38F,0x1AA7FFFF,0x11AAAAA4,0x12AAA9CB,0x520C0A3,0x31AD3C8,0x18FF3441,0x1ADF7AE0,0x7CC27C3,0x1B5E1F22,0x6424DF9,0x1BAA99BC,0xAB05F8B,0x4},{0xAAA97BE,0x11C55555,0x1671C718,0xC71C687,0xE15D5C2,0x211E285,0x10AA22D6,0x73FA740,0x532C52D,0x123EBF6C,0xED6DEA6,0x1D1C667D,0x1C759507,0x2},{0x11C6D706,0x167E38E3,0x124BDA04,0x184BD7F1,0x1E500FC8,0x1CEC3E93,0x126FD510,0x1A940FEC,0x130F7DA5,0x183B688C,0x16693062,0x15682276,0x130477C7,0xA},{0x1FFFAA99,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFA9D3,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD},{0x1FFFA8FB,0xFF7FFFF,0x14FFFFEE,0x17FFFD62,0xF6241EA,0x9507B58,0xAFD9CC3,0x109E70A2,0x1764774B,0x121A5D66,0x12C6E9ED,0x12FFCD34,0x111EA3,0xD}};

#endif

#endif

#if CHUNK==64

const int CURVE_Cof_I_BLS12381= 0;

const int CURVE_B_I_BLS12381= 4;
const BIG_384_58 CURVE_B_BLS12381= {0x4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 CURVE_Order_BLS12381= {0x3FFFFFF00000001L,0x36900BFFF96FFBFL,0x180809A1D80553BL,0x14CA675F520CCE7L,0x73EDA7L,0x0L,0x0L};
const BIG_384_58 CURVE_Gx_BLS12381= {0x33AF00ADB22C6BBL,0x17A0FFE5E86BBFEL,0x3A3F171BAC586C5L,0x13E5DD2E4168538L,0x4FA9AC0FC3688CL,0x65F5E509A558E3L,0x17F1D3A73L};
const BIG_384_58 CURVE_Gy_BLS12381= {0xAA232946C5E7E1L,0x331D128A222B903L,0x18CB2C04B3EDD03L,0x25757402BD8036CL,0x1741D8AE4FCF5E0L,0xEAA83C68278C3BL,0x8B3F481EL};
const BIG_384_58 CURVE_HTPC_BLS12381= {0xC51062BDE821B8L,0x1A5483B9715FEDFL,0x1BDD403FC31088BL,0x3D2523427FC11BBL,0x1A3D71BDA12F01DL,0x2DB2FDD36CE3D2AL,0x1F7462C8L};

const BIG_384_58 CURVE_Bnx_BLS12381= {0x201000000010000L,0x34L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 CURVE_Cof_BLS12381= {0x201000000010001L,0x34L,0x0L,0x0L,0x0L,0x0L,0x0L};
//const BIG_384_58 CURVE_Cof_BLS12381= {0xAAAB0000AAABL,0x3230015557855A3L,0x396L,0x0L,0x0L,0x0L,0x0L};


const BIG_384_58 CURVE_Pxa_BLS12381= {0x8056C8C121BDB8L,0x300C9AA016EFBF5L,0xB647AE3D1770BAL,0x353E900EC0AD144L,0x32DC51051C6E47AL,0x23C2A449820149L,0x24AA2B2FL};
const BIG_384_58 CURVE_Pxb_BLS12381= {0x1AC7D055D042B7EL,0x33C4484E51755F9L,0x21BBDC7F5049334L,0x3426482D86AD769L,0x88274F65596BD0L,0x9C67D81F6B34E8L,0x13E02B605L};
const BIG_384_58 CURVE_Pya_BLS12381= {0x193548608B82801L,0x2B2730EEB28A278L,0x1A695160D12C923L,0x2AA32F74E9DB50AL,0x2DA2E351AADFD9BL,0x9F5B8463327371L,0xCE5D5277L};
const BIG_384_58 CURVE_Pyb_BLS12381= {0x2A9075FF05F79BEL,0x1C349D73B07686AL,0x12AB572E99AB3F3L,0x1FA169D8EBC99D2L,0x2BC28B99CB3E28L,0x3A9CD330CAB34ACL,0x606C4A02L};

#if HTC_ISO_BLS12381 != 0
const BIG_384_58 CURVE_Ad_BLS12381= {0xF428082D584C1DL,0xDBE368383E5FD7L,0x181AEFD881AC989L,0x14E0FB99AA363A2L,0x2C96D4982B0EA98L,0xEE3A50CF5A4E80L,0x144698AL};
const BIG_384_58 CURVE_Bd_BLS12381= {0x1CC48E98E172BE0L,0xC8568C5B3AA974L,0x14FCEF35EF55A2L,0x3C3C93D01C282E7L,0x753EEE3B2016C1L,0x5A200C0062C4BAL,0x12E2908D1L};
const BIG_384_58 PC_BLS12381[53]= {{0x1C8BA2E8BA2D229L,0x2C6E02D934E47EAL,0x3F1BC24C6B68C24L,0x1F88B20DEF08F02L,0x381EDEE3D31D79DL,0x389839C2F47A588L,0x6E08C248L},{0x267DF3F1605FB7BL,0x2DDC7E30A177B32L,0x336003B14866F69L,0x37799E1FE5B542BL,0x1D2565B0DFA7DCCL,0x27381F89CB63B02L,0x10321DA07L},{0x3241067BE390C9EL,0x242CBB700C9DE5FL,0x14BAF4BB1B7FA31L,0x200E83172659D8CL,0x15D138F22DD2ECBL,0x2F3E9F10B830DD4L,0x169B1F8E1L},{0x171986A8497E317L,0xA57CA5ADD3A55BL,0x16C928C5D1DE4FAL,0x1B39E7D55D28B16L,0x163BE990DC43B75L,0x269E3F11EE42CCDL,0x80D3CF1FL},{0xCB5618E3F0C88EL,0x1F23E323D1D6BE7L,0x62EF0F2753339BL,0x2AC9D6D36C69A0BL,0xD1117E53356DE5L,0x6AF6F8BA1D0E21L,0x17B81E770L},{0x1D7F225A139ED84L,0x944A30414BB2B7L,0x2218F9C86B2A8DAL,0x993C3E33864023L,0x38AE652BFB11586L,0x3F9134A5A8DC9B0L,0xD6ED6553L},{0x113C1C66F652983L,0x1C34B72B9CF4673L,0x2B9097E68F90A08L,0x1F76549E66E7B4EL,0x3F7A74AB5DB3CB1L,0x35CC4FFC0744806L,0x1630C3250L},{0x1154CE9AC8895D9L,0x28A1BCC079DF114L,0x2B65982FAC18985L,0x168495FECFC21BBL,0x3E4118E5499DB99L,0x667D10D990AD2CL,0xE99726A3L},{0x1B388641D9B6861L,0x1B89738C41C64F1L,0x3289F1B33083533L,0x195AA36FC97C6CCL,0x307E55412D7F5E4L,0x3F31B6DD3818274L,0x1778E7166L},{0x179F9DAC9EDCB0L,0x30F8F4A825CA7F8L,0x2501EC68E25C958L,0x1CCA5660F95A1E3L,0x1D10A9A1BCE0324L,0x25D9E3B07441231L,0xD54005DBL},{0x34EEF1B3CB83BBL,0x23CA9BCC630D5BAL,0x233C70D1E86B483L,0x16CBDAA105FD597L,0x22147A81C7C17E7L,0x250EACBC1622EACL,0x17294ED3EL},{0x2AC1662734649B7L,0x30B57CB98B5BABL,0x3B56CDB4E2C8561L,0x2228B5C017FC989L,0x1D99815856B303EL,0x3A0CCD02E024407L,0x11A05F2B1L},{0x16384D168ECDD0AL,0x1D392D2DE19400BL,0x133978F31C15931L,0x3BA5BDF40DDDB7DL,0x2B3A56680F682B4L,0x27A4AB511DB5B8FL,0x95FC13ABL},{0x376EC3A79A1D641L,0x99A4AAEE90DC11L,0xDA67F398835038L,0x75C584D9ADD040L,0x1AFC7A3CCE07F8DL,0x36953E097A482CFL,0xA10ECF6AL},{0x1F7D99BBDCC5A5EL,0x16E52274478B4C4L,0x21CDF9822C580FAL,0x3086F29A2A0665BL,0x74CF01996E7F63L,0x3592A2C8C2CFD6CL,0x14A7AC2A9L},{0x2574496EE84A3AL,0xECD4E3C3781B3BL,0x73062AEDE9CEA7L,0x266BD4E862538B8L,0x3E0596721570F57L,0x5A4D8643CF8318L,0x772CAACFL},{0x2DF9A29F6304A5L,0x3492F108A3C470L,0x3CEF24B8982F740L,0x3A73A72B534290EL,0x30506C6E9395735L,0x13999EE554E43DFL,0xE7355F8EL},{0x39D395B3532A21EL,0xA6EA07CD5E0754L,0x4E833B306DA9BDL,0x16684818AEE35ADL,0x343E7A07DFFDFC7L,0x8A452A029BC757L,0x13A8E1620L},{0x30DE8938DC62CD8L,0x1B5490FBB3D7104L,0x28ABC28D6FD0497L,0xFC5AC595455332L,0x37C40EB545B0824L,0x162B8BFB20EABFBL,0x3425581AL},{0xC239BA5CB83E19L,0xF4259F253FB73FL,0xE00B11ACEACD6AL,0x1BD69C63347F299L,0x1BFF2991F6F8941L,0x1E8C897A04DF98AL,0xB2962FE5L},{0x1C8276EC82B3BFFL,0x2AA211B2C09BA79L,0x2588C48BF5713DL,0x32833C20030049BL,0x298E536367041E8L,0x2D56710D22D1C44L,0x12561A5DEL},{0x13CF9FA40D21B1CL,0x235A06F8D0F7E26L,0x8617FC8AC62B55L,0x12E8D6D22EA7256L,0x34BD3FA6F01D5EFL,0x33FC66B862CB98BL,0x8CA8D548L},{0xB456BE69C8B604L,0x1409FBFB0071DC1L,0x14FA95AF01B2B66L,0x23E125968E55EB7L,0x342DF2EB5CB181DL,0x243C0F393A942CEL,0x15E6BE4E9L},{0x26B1E715475224BL,0x4126D95E6BEDE1L,0xF5D396A7CE46BAL,0x2075FA195A366ACL,0x348C4A3FC5E673DL,0x39133C440A8567DL,0x5C129645L},{0x2D9D3F5DB980133L,0x3E42B4708CA9910L,0x232D3C40659CC6CL,0x20353056004F99L,0x27BE315DC757B3BL,0x347B2A6DCBF002BL,0x245A394AL},{0x14C04F00B971EF8L,0x214706464847C83L,0x10E807B4633F06CL,0xA8D09AC23B009CL,0x4F53F447AA7B1L,0x6E4E674554258L,0xB182CAC1L},{0x207C8A4D0074D8EL,0x2737D06D13581B3L,0x3E7F911F643249DL,0x2E2ABC30918B9AFL,0x3FED2EDCC523559L,0x3CDBDB7AE463050L,0x18B46A908L},{0x13711AD011C132L,0x3CE97338FEEBF3AL,0x3E416389E61031BL,0x32DB2BD24FF4460L,0x31D43FB93CD2FCBL,0xDF346F837F42E3L,0x19713E479L},{0x3AFAAEBCA731C30L,0x3DC157753AE9BCAL,0x1E7ED1E4D43B9B3L,0x29E456BDBF81A61L,0x3ADA14A23C42A0CL,0x61AF6D488EAF79L,0xE1BBA7A1L},{0x370E577BDBA587L,0x1948071E181E8D8L,0x2E6A1F20CABE69DL,0x599E7709B07A2DL,0x21E4DA1BB8F3ABDL,0x3659A12FA232788L,0x9FC4018BL},{0x15E4CA31870FB29L,0x191543FB7FA4D68L,0xDA6C26C842642FL,0x2FF8EF7607FF40EL,0x12CA6C674170A05L,0xCEAE1BF7A649AFL,0x987C8D53L},{0x161F8855FE9D6F2L,0x21EB09183D057B2L,0x13C4D634F3747AL,0x328AF86132D48C5L,0x27796B3CE75BB8L,0x3EB06EF2CB25DF4L,0x4AB0B9BCL},{0x1B23AB13633A5F0L,0x3D8C9B256A01CA6L,0x1C3D3AD5544E203L,0x352BEB6DEF5D941L,0x1B8F0A6A074A7D0L,0x18D2DA88847847L,0x16603FCA4L},{0x1B6DAECF2E8FEDBL,0x1FE370264102A10L,0x3FD221351ADC2EEL,0x3EF8F3942E1E60CL,0x2A21529C4195536L,0x3F83FC4D72BD3F8L,0x8CC03FDEL},{0x2355C77B0E5F4CBL,0x16AEA7B1877B29L,0x23EC03251CF9DE4L,0x2E43BADE4702792L,0x2D8746757D42AA7L,0x22607085E261D46L,0x1F86376EL},{0xDFE240C72DE1F6L,0x354858A2C0148EEL,0x3E4B91400DA7D26L,0x359628C738B0D12L,0x6A3B49942552E2L,0x2A59B99BD28E132L,0xCC786BAL},{0x97E75A2E41C696L,0x159C4658BEA2FF8L,0x2343EB67AD34D6CL,0x1B0953CE0F43E41L,0x376FB46831223E9L,0x13B960475440DB5L,0x134996A10L},{0x29845719707BB33L,0x31EBBA6CEE8F0AFL,0x2F6C956543D3CD0L,0x23922A1A548AD4AL,0x14980DCFA11AD13L,0x2E893B8096747C2L,0x90D97C81L},{0x15473A1D634B8FL,0xBD5C3C4D25E011L,0x3CD6356CAA205CAL,0x19789CEE14CC93BL,0x20D7819C171C40FL,0x1B7700F9AC90957L,0xE0FA1D81L},{0x1FADC1326ED06F7L,0x145EF61C5332034L,0xDF27942480E420L,0x2539CA49F072DD2L,0x153CD76F2BF565BL,0x2CB93CED8A2F743L,0x2660400EL},{0x299B138573345CCL,0x1D8F8EE42B047L,0x2EF9A00D9B86930L,0x3662B7C0899F573L,0xB45F1496543346L,0x31D9FF8F0D84C51L,0xAD6B9514L},{0x284B529E2561092L,0x25A261BDFAEFAA5L,0x1A88CEA7913516FL,0x22BBF390B4A303EL,0x248C50C477F94FFL,0x20740CFFD614B07L,0xACCBB674L},{0xF8B49CBA8F6AA8L,0x170A7D3E0C18100L,0x1B36E636A5C871AL,0xE6ED8698A43964L,0x1AD2911D9C6DD0L,0x3A9016F523C0428L,0x4D2F259EL},{0x6EF48BB8913F55L,0x217A8F54A6CD78DL,0x192E7EA7D4FBC73L,0x18F84F61EED4C21L,0x3D94A84903216F7L,0x1C29B873AA08165L,0x167A55CDAL},{0x3233D9D55535D4AL,0x3F8BDEEE49220DAL,0x350C4BF39B4852CL,0x3931ABD6482AF15L,0x3D1D74CC4F9FB0CL,0xDB1848C686F953L,0x1866C8ED3L},{0xEE415A15812ED9L,0x3D6C020077B918L,0xFD206357132B92L,0x17BE87D3F5FFACDL,0x2BBA6FF6EE5A437L,0x38FA9FA80EF377EL,0x16A3EF08BL},{0x11A1399126A775CL,0x2A7006962C7EE4FL,0x25BC400A0051D5FL,0x3EA3433E3BD774DL,0xACE9824B5EECFDL,0x2A676CBF0EEA1CDL,0x166007C08L},{0x2C6477FAAF9B7ACL,0xE36E77EA733880L,0x187B6F0F5A6449FL,0x3195543620717B3L,0x2AC783182B70152L,0x61B6CB67EC99BAL,0x8D9E5297L},{0x239142311A5001DL,0x2C57703F4BB7B76L,0x1A0FC9DEC916A20L,0x27C3DA6EEC150BBL,0x2F8228DDCC6D19CL,0x117D0F92C033244L,0xBE0E0795L},{0xD26D98445F5416L,0xD93CB0A0A5EB6AL,0x2489E726AF41727L,0x36F76F34C3848F6L,0x389EDB4D1D115C5L,0x26394E57C8348EFL,0x16B7D2887L},{0x22538B53DBF67F2L,0x15F358DBE5BE247L,0x25DD279CD2ECA67L,0x15546B9FCC430D6L,0x16E8EB15778C485L,0x1903689DBEAAB9FL,0x58DF3306L},{0x2F6102C2E49A03DL,0x10981D8D4A78D4CL,0x356F453E01F78AL,0x3DCC71356729284L,0x43C348B885C84FL,0xE0480786832F5BL,0x1962D75C2L},{0x1479253B03663C1L,0xDA23BD83081B40L,0x232B5BE72E7A07FL,0x395E2602F9BBB0CL,0xFAD0EAE9601A6DL,0x2A7262C94860450L,0x16112C4C3L}};
#endif

#if HTC_ISO_G2_BLS12381 != 0
const BIG_384_58 CURVE_HTPC2_BLS12381= {0x27713A80F8492BL,0x211421FBAA68D1FL,0x361DD4CB6D9723BL,0x1B89D475CD7D27CL,0x21ECE6B49FAD53L,0x301E011E4075923L,0x52988B9L};
const BIG_384_58 CURVE_Adr_BLS12381= {0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 CURVE_Adi_BLS12381= {0xF0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 CURVE_Bdr_BLS12381= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 CURVE_Bdi_BLS12381= {0x3F4L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L};
const BIG_384_58 PCR_BLS12381[13]= {{0xE2AAAAAAAA5ED1L,0x238E343D9C71C62L,0x108F142B8575709L,0x39FD3A042A88B58L,0x11F5FB614CB14B4L,0x28E333EBB5B7A9AL,0x171D6541FL},{0x2A9FFFFFFFFC71EL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x238AAAAAAAA97D6L,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0xCL,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1B371C71C718B10L,0x2425E95B712F678L,0x37C69AA274524E7L,0xDE87898A1AC3A5L,0x1E3811AD0761B0FL,0x2DB3DE6FEFDC10FL,0x124C9AD43L},{0x2A9FFFFFFFFC71CL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x2CFC71C71C6D706L,0x3097AFE324BDA04L,0x39D87D27E500FC8L,0x35281FD926FD510L,0x3076D11930F7DA5L,0x2AD044ED6693062L,0x1530477C7L},{0x12L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x1FEFFFFFFFFA8FBL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}};
const BIG_384_58 PCI_BLS12381[13]= {{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x354FFFFFFFFE38DL,0x255553971AAAAA4L,0x635A790520C0A3L,0x35BEF5C18FF3441L,0x36BC3E447CC27C3L,0x375533786424DF9L,0x8AB05F8BL},{0x2A9FFFFFFFFC71AL,0xAAAA72E3555549L,0xC6B4F20A418147L,0x2B7DEB831FE6882L,0x2D787C88F984F87L,0x2EAA66F0C849BF3L,0x11560BF17L},{0x238AAAAAAAA97D6L,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0x1FEFFFFFFFFAA9FL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFAA63L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x0L,0x0L,0x0L,0x0L,0x0L,0x0L,0x0L},{0x354FFFFFFFFE38FL,0x255553971AAAAA4L,0x635A790520C0A3L,0x35BEF5C18FF3441L,0x36BC3E447CC27C3L,0x375533786424DF9L,0x8AB05F8BL},{0x238AAAAAAAA97BEL,0x18E38D0F671C718L,0x423C50AE15D5C2L,0xE7F4E810AA22D6L,0x247D7ED8532C52DL,0x3A38CCFAED6DEA6L,0x5C759507L},{0x2CFC71C71C6D706L,0x3097AFE324BDA04L,0x39D87D27E500FC8L,0x35281FD926FD510L,0x3076D11930F7DA5L,0x2AD044ED6693062L,0x1530477C7L},{0x1FEFFFFFFFFAA99L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFA9D3L,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L},{0x1FEFFFFFFFFA8FBL,0x2FFFFAC54FFFFEEL,0x12A0F6B0F6241EAL,0x213CE144AFD9CC3L,0x2434BACD764774BL,0x25FF9A692C6E9EDL,0x1A0111EA3L}};
#endif

#endif
